<?php

class LoginValidator extends sfValidatorSchema
{
  public function __construct($options = array(), $messages = array())
  {
    parent::__construct(null, $options, $messages);
  }
  
  protected function configure($options = array(), $messages = array())
  {
    $this->addRequiredOption('model');
    $this->addRequiredOption('column');
    $this->addRequiredOption('find_method');

    $this->addMessage('no_perfil'          , 'Tu cuenta no tiene perfil. Por favor comuniquese con el administrador &oacute; Super Administrador');
    $this->addMessage('inactivo'           , 'Tu cuenta esta actualmente inactiva. Por favor comuniquese con el administrador &oacute; Super Administrador');
    $this->addMessage('password_incorrecto', 'El password que Ud. ingreso no coincide.');
    $this->setMessage('invalid'            , '"Usuario" y "Contrase&ntilde;a" incorrectas!.');
  }
  
  protected function doClean($values)
  {
  	//Deb::print_r($values);
    if (!is_array($values))
    {
      throw new InvalidArgumentException('You must pass an array parameter to the clean() method (this validator can only be used as a post validator).');
    }
    
    if (!is_array($this->getOption('column')))
    {
      $this->setOption('column', array($this->getOption('column')));
    }
    
    // no valida cuando el campo esta ne blanco
    foreach ($values as $value)
    {
      if (empty($value)) return $values;
    }
    $columns    = $this->getOption('column');
    $findMethod = $this->getOption('find_method');
    $usuario    = Doctrine::getTable($this->getOption('model'))->$findMethod($values[$columns[0]]);
    
    $arguments = array();
    if (!$usuario)
    {
      $error     = 'invalid';
      $arguments = array('column' => implode(', ', $this->getOption('column')));
    }
    /*elseif (Cipher::getInstance()->encrypt($values[$columns[1]]) != $usuario->getPassword())
    {
      $error     = 'password_incorrecto';
    }*/
    elseif (!$usuario->getPerfil()->exists())
    {
      $error     = 'no_perfil';
    }
    elseif (!$usuario->estaActivo())
    {
      $error     = 'inactivo';
    }
    else
    {
      return $values;
    }
    
    $error = new sfValidatorError($this, $error, $arguments);
    
    throw $error;
  }
}